package com.gopay.common.constants.txncd;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 内部交易码
 * 
 * @IntTxnCd.java
 * @author zhanglei
 * @2013-1-22 上午11:10:07 www.gopay.com.cn Inc.All rights reserved.
 */
public enum IntTxnCd {

    /** 通用支付 */
    _00100("00100", "网关支付"),

    /** 大宗入金 */
    _00200("00200", "入金"),
    /** 大宗划拨收益 */
    _00201("00201", "划拨收益"),
    /** 大宗出金 */
    _00202("00202", "出金"),
    /** 大宗签约 */
    _00203("00203", "签约"),
    /** 大宗解约 */
    _00204("00204", "解约"),
    /** 大宗签到 */
    _00205("00205", "大宗签到"),
    /** 大宗签退 */
    _00206("00206", "大宗签退"),
    /** 大宗市场入金 */
    _00207("00207", "大宗市场入金"),

    /** 海外购物支付 */
    _00300("00300", "海外购物支付"),
    /** 海外购物退款 */
    _00301("00301", "海外购物退款"),
    /** 海外购物支付确认 */
    _00302("00302", "海外购物支付确认"),

    /** 通用担保支付申请 */
    _00400("00400", "担保支付申请"),
    /** 通用担保支付（部分）完成 */
    _00401("00401", "担保支付完成"),
    /** 通用担保支付取消 */
    _00402("00402", "担保支付取消"),

    /** 虚拟账户充值 */
    _00500("00500", "充值"),

    /** 上缴保证金 */
    _00501("00501", "上缴保证金"),

    /** 返还保证金 */
    _00502("00502", "返还保证金"),

    /** 代扣服务费 */
    _00600("00600", "代扣"),
    
    /** 申请数字证书 */
    _00601("00601" ,"申请数字证书"),
    
    /** 更新数字证书 */
    _00602("00602", "更新数字证书"),
    
    /**银行卡鉴权**/
    _00603("00603", "银行卡鉴权"),
    
    /**实名认证API**/
    _00604("00604" ,"实名认证API"),
    
    /**退款数字证书**/
    _00605("00605", "退款数字证书"),

    /**网关分账**/
    _00606("00606", "收款分账"),
    
    /** 付款到银行 */
    _00700("00700", "付款到银行"),

    /** 退款转账 */
    _00701("00701", "退款转账"),

    /** 内部交易 分润到国付宝  */
    _00702("00702", "分润到国付宝"),

    /** 内部交易 分润到银行  */
    _00703("00703", "分润到银行"),

    /** 内部交易 强制扣款 */
    _00704("00704", "强制扣款"),

    /**内部交易返点**/
    _00705("00705", "返点"),

    /** 提现 */
    _00800("00800", "提现"),

    /** 付款到国付宝 */
    _00900("00900", "付款到国付宝"),
    
    /** 付款到关联账户*/
    _00901("00901", "内部账户资金划转"),

    /** 虚拟账户担保转账申请 */
    _01000("01000", "虚拟账户担保转账申请"),
    /** 虚拟账户担保转账完成 */
    _01001("01001", "虚拟账户担保转账完成"),
    /** 虚拟账户担保转账取消 */
    _01002("01002", "虚拟账户担保转账取消"),

    /** 锁定保证金 */
    _01100("01100", "锁定保证金"),
    /** 解锁保证金 */
    _01101("01101", "解锁保证金"),

    /** 收款交易退款 */
    _01200("01200", "退款"),
    /** 付款交易退款 */
    _01201("01201", "付款交易退款"),

    /** 分账退款 */
    _01202("01202", "收款分账退款"),

    /** 航空票务 收款退款 */
    _01203("01203", "收款退款"),

    /** 航空票务 转账退回 */
    _01204("01204", "转账退回"),

    /** 手工调账 */
    _09800("09800", "手工调账"),
    /** 错账短款调账 */
    _09801("09801", "错账短款调账"),
    /** 冻结余额 */
    _09802("09802", "冻结可用余额"),
    /** 解冻余额 */
    _09803("09803", "解冻可用余额"),

    /** 银行卡重复支付冲正 */
    _09900("09900", "银行卡重复支付冲正"),
    /** 信用卡充值冲正 */
    _09901("09901", "信用卡充值冲正"),
    /** 海外购物交易超时冲正 */
    _09902("09902", "海外购物交易超时冲正"),
    /** 收益结算 */
    _09700("09700", "结算收益金"),
    /** 专属账户充值 */
    _01300("01300", "专属账户充值"),
    /** 专属账户提现至国付宝 */
    _01311("01311", "专属账户提现至国付宝"),
    /** 专属账户提现 */
    _01301("01301", "专属账户提现"),
    /** G商融通转账 */
    _01302("01302", "G商融通转账"),
    /** 投标完成 */
    _01303("01303", "投标完成"),
    /** G商融通绑定 */
    _01304("01304", "G商融通绑定"),
    /** G商融通解绑 */
    _01305("01305", "G商融通解绑"),
    /** 返润 */
    _01400("01400", "返润"),
    /** 登录*/
    _00001("00001", "登录"),
    
    /** 手机钱包 个人扫商户 */
    _01601("01601", "个人扫商户"),
    
    /** 手机钱包 商户扫个人 */
    _01602("01602", "商户扫个人"),
    
    /** 手机钱包 个人扫个人  手机转账国付宝 */
    _01603("01603", "手机转账到国付宝"),
    
    /** 手机钱包 商户扫商户 */
    _01604("01604", "商户扫商户 "),
    
    /** 手机钱包 手机转账到银行 */
    _01605("01605", "手机转账到银行卡"),
    
    /** 手机钱包 手机信用卡还款 */
    _01606("01606", "信用卡还款"),
    
    /** 手机钱包 我要收款 */
    _01607("01607", "我要收款"),
    
    /** 手机钱包 发红包 */
    _01608("01608", "发红包"),
    
    /** 手机钱包 领红包 */
    _01609("01609", "领红包"),
    
    /** 手机钱包 红包退款 */
    _01610("01610", "红包退款"),
    
    /** 手机钱包 话费充值*/
    _01611("01611", "手机钱包话费充值"),
    
    /** 手机钱包 流量充值*/
    _01612("01612", "手机钱包流量充值"),
    
    /** 手机钱包 加油卡充值*/
    _01613("01613", "加油卡充值"),

    /** 手机钱包 一分钱支付*/
    _01614("01614", "一分钱快捷支付"),

    /** 国付宝钱包，天溢盈:理财支付*/
    _01615("01615", "理财支付"),
    /** 国付宝钱包，天溢盈:理财兑付到国付宝 add by tangyang at 20170217 */
    _01616("01616", "理财兑付到国付宝"),
    /** 国付宝钱包，天溢盈:理财兑付到银行 add by tangyang at 20170217 */
    _01617("01617", "理财兑付到银行"),
    /** 手机钱包 视频会员卡 add by tangyang at 20170524*/
    _01618("01618","手机钱包视频会员"),

    /** 云账户网关支付商城*//*
    _01801("01801", "云账户网关支付商城"),*/
    
    /** 云账户开户*/
    _01802("01802", "云账户开户"),
    /**
     *云账户 提现银行卡绑定
     */
    _01803("01803", "云账户提现银行卡绑定"),
    /**
     *云账户 提现银行卡解绑
     */
    _01804("01804", "云账户提现银行卡解绑"),
    /**
     * 云账户 账户锁定/解锁
     */
    _01805("01805", "云账户账户锁定/解锁"),
    
    /**云账户 用户信息修改*/
    _01806("01806","云账户用户信息修改"),
    
    /** 云账户 冻结*/
    _01807("01807", "冻结"),
    
    /** 云账户  解冻*/
    _01808("01808", "解冻"),
    
    /** 云账户  转账冻结*/
    _01809("01809", "转账冻结"),
    
    /** 云账户  转账（解冻转账退款）*/
    _01810("01810", "转账（解冻转账退款）"),
    /** 云账户 解冻转账*/
    _01811("01811", "解冻转账"),
    
    /** 云账户 转账 B2B*/
    _01812("01812", "云账户转账"),

    /** 云账户子账户收款 add by sh.jiao 20170919 */
    _01813("01813","云账户子账户收款"),

    /** 对公鉴权 */
    _01817("01817", "对公鉴权"),

    /** G商融通(p2p)  签约**/
	_01900("01900", "G商融通签约"),
	
	/** G商融通(p2p)  发标  **/
	_01901("01901", "G商融通发标"),
	
    /** G商融通(p2p)  投标 **/
	_01902("01902", "G商融通投标"),
	
	/** G商融通(p2p)  流标  **/
	_01903("01903", "G商融通流标"),
	
	/** G商融通(p2p)  放款 **/
	_01904("01904", "G商融通放款"),
	
	/** G商融通(p2p)  还款  **/
	_01905("01905", "G商融通还款"),
	
	/** G商融通(p2p)  回款  **/
	_01906("01906", "G商融通回款"),
	
	/** G商融通(p2p) 标的更新  **/
	_01907("01907", "G商融通标的更新"),
	
	/** G商融通转账  **/

	_01908("01908", "G商融通转账"),

    /**手续费计提 */
    _02100("02100", "手续费计提"),

    /**存管资金结算 */
    _02200("02200", "存管资金结算"),

    /** 基金账户签约*/
    _02001("02001", "基金账户签约"),

    /** 基金账户解约*/
    _02002("02002", "基金账户解约"),

    /** 基金账户绑卡/解绑 */
    _02003("02003", "基金账户绑卡/解绑"),

    /** 基金账户申购/认购 */
    _02004("02004", "基金申购/认购"),

    /** 基金单笔申购/认购交易查询 */
    _02006("02006", "基金单笔申购/认购交易查询"),

    /** 基金签约查询*/
    _02008("02008", "基金签约查询"),

    /** 基金绑定银行卡查询*/
    _02009("02009", "基金绑定银行卡查询"),

    /** 基金短信发送*/
    _02010("02010", "基金短信发送"),

    /** 基金公司文件上传通知*/
    _02011("02011","基金公司文件上传通知"),

    /**基金赎回分红退款*/
    _02012("02012", "基金赎回/分红/退款"),

    /**企业理财转入*/
    _02013("02013","理财转入"),

    /**企业理财转出*/
    _02014("02014","理财转出"),

    /**企业理财退款*/
    _02015("02015","理财退款"),

    /**国付宝转基金**/
	_02016("02016", "国付宝转基金"),

	/**基金转国付宝**/
    _02018("02018", "基金转国付宝"),

    /**活期宝转入**/
    _02019("02019", "活期宝转入"),

    /**活期宝转出**/
    _02020("02020", "活期宝转出"),

    /**活期宝退款**/
    _02021("02021", "活期宝退款"),



	

	/** 跨境人民币进口  **/
	_01720("01720", "跨境人民币进口"),
	
	/** 跨境人民币出口  **/
	_01721("01721", "跨境人民币出口"),
	
	/** 跨境人民币结汇到账户  **/
	_01722("01722", "跨境人民币结汇到账户"),
	
	/** 跨境人民币留学汇款  **/
	_01723("01723", "跨境人民币留学汇款"),
	
	/** 跨境人民币跨境汇款  **/
	_01724("01724", "跨境人民币跨境汇款"),
	
	/** 跨境人民币跨境汇款-线下付款  **/
	_01725("01725","跨境汇款-线下付款"),
	
	/** 跨境人民币进口退款  **/
	_01727("01727", "跨境人民币进口退款"),
	
	/** 跨境人民币汇款退款  **/
	_01728("01728", "跨境人民币汇款退款"),
	
	/** 跨境人民币境外提现退款  **/
	_01729("01729", "跨境人民币境外提现退款"),
	
	/** 跨境人民币留学退款  **/
	_01730("01730", "跨境人民币留学退款"),
	
	/** 跨境人民币提现 **/
	_01726("01726", "跨境人民币提现"),

	/** 跨境人民币汇款充值*/
	_01732("01732", "跨境人民币汇款充值"),

	/** 跨境人民币汇款充值退款 */

	_01733("01733", "跨境人民币汇款充值退款"),
	
    /** 跨境人民币拨款订单 */
    _01734("01734" ,"跨境人民币拨款订单"),

    /** 跨境人民币汇款汇总支付订单 */
    _01735("01735", "跨境人民币汇款汇总支付订单"),

    /** 跨境人民币进口分账订单 */
    _01736("01736", "跨境人民币(进口)分账"),

    /** 跨境人民币进口分账退款订单 */
    _01737("01737", "跨境人民币(进口)分账退款"),

    /** 跨境人民币进口批量支付订单 */
    _01738("01738", "跨境人民币进口批量支付"),

    /** 外卡支付 */
    _01740("01740", "外卡支付"),

    /** 外卡账户提现 */
    _01741("01741", "外卡账户提现"),

    /** 外卡支付退款 */
    _01742("01742", "外卡支付退款"),

    /** 外卡支付拒付 */
    _01743("01743", "外卡支付拒付"),

    /** 外卡支付调单 */
    _01744("01744", "外卡支付调单"),


	/**委托代收授权(原鉴权)**/
    _00664("00664","委托代收授权"),
	
	/**委托代收交易API**/
    _00666("00666", "委托代收"),

	/**聚合支付**/
	_02301("02301","聚合支付"),

	/**三方条码支付撤销**/
	_02302("02302","三方条码支付撤销");
    public final String value;
    /**
     * 增加name值，用做翻译   add by lx 2017-6-15 11:44:44
     */
    public final String name;

    IntTxnCd(String value, String name) {
        this.value = value;
        this.name = name;
    }

	@Override
	public String toString() {
        return this.value;
    }

    /**
     * 根据枚举类型的字符串值 获取 相应的枚举变量
     */
    public static IntTxnCd get(String str) {
        IntTxnCd[] cs = IntTxnCd.class.getEnumConstants();
        for (IntTxnCd c : cs) {
            if (c.toString().equals(str)) {
                return c;
            }
        }
        throw new RuntimeException(" wrong " + IntTxnCd.class.getSimpleName() + " string value! " + str);
    }

    /**
     * @Description  国付宝与CFCA交易类型转换  反诈骗项目
     * @Author jianghoupeng
     * @Date 2016/11/22 15:39
     */
    public static String getByGopayTxnCd(String txnCd){
        if ("00700".equals(txnCd)){
            return "6";//代付
        }else if ("01607".equals(txnCd)){
            return "5";//代收
        }else if ("00100".equals(txnCd) || "01602".equals(txnCd) || "01601".equals(txnCd) ||"01604".equals(txnCd) || "01611".equals(txnCd) || "01613".equals(txnCd)){
            return "4";//支付账户消费
        }else if ("01605".equals(txnCd) || "00800".equals(txnCd)){
            return "3";//支付账户提现/转账至银行卡
        }else if ("00900".equals(txnCd) || "01603".equals(txnCd)){
            return "2";//支付账户对支付账户转账
        }else if ("00500".equals(txnCd)){
            return "1";//支付账户充值
        }else{
            return "9";
        }
    }

    /**
     * 翻译交易码名称   add by lx 2017-6-15 11:44:20 生产bug5期<br />
     * 以后不再使用DicTranslate中的交易码翻译
     * @param value 交易码字符串
     * @return
     */
    public static String getIntTxnCdName(String value) {
        if (value == null || "".equals(value.trim())) {
            return "";
        }
        try {
            IntTxnCd intTxnCd = get(value);
            return intTxnCd.name;
        } catch (Exception e) {
            return "未知交易";
        }
    }

    /**
     * 遍历所有枚举
     * @author yhwpeng@126.com
     * @date 2018-05-23 17:29:01
     * @params
     * @return java.util.List<com.gopay.common.constants.txncd.IntTxnCd>
     */
    public static List<IntTxnCd> listAll() {
        List<IntTxnCd> intTxnCdList = Arrays.asList(IntTxnCd.values());
        return new ArrayList<>(intTxnCdList);
    }

    public String getValue() {
        return value;
    }

    public String getName() {
        return name;
    }
}
